package main

import (
	"fmt"
)

func myPrint(a []int) {
	fmt.Printf("len=%d cap=%d v=%v \n", len(a), cap(a), a)
}
func Pic(dx, dy int) [][]uint8 {
	var test = [][]uint8{
		{1, 2, 3},
		{4, 5, 6},
	}
	return test[:dy][:dx]
}
func main() {
	fmt.Println("This is make")
	// 切片可以用内建函数 make 来创建，这也是你创建动态数组的方式。
	a := make([]int, 5) // len(a)=5 表示创建一个数组长度为5,或者称为创建了一个切片，长度为5,默认创建好了 都是初始值
	myPrint(a)
	b := make([]int, 5, 10) //第三个参数用来指定切片的容量
	// b[:3] = {1,2,3}
	b[4] = 12
	myPrint(b)
	c := b[:10]     // 如果使用不定义长度的a就会出现错误，显然定义一个切片之前长度要设置好
	d := b[:cap(b)] // 通过这种方式创建最好
	myPrint(c)
	myPrint(d)

	var s []int // 创建一个切片
	// s[0] = 1   // 因为初始化的s都是空的，因此这里会产生错误
	s = append(s, 1, 2) // 这种情况下可以这样弹如数据
	myPrint(s)

	// 使用 for range 遍历数组
	// 使用这种方法遍历数组时，会先后返回数组的索引和值
	for i, v := range s {
		fmt.Printf("%d %d \n", i, v)
	}
	// 可以使用——来忽略索引或值
	for _, v := range s {
		fmt.Println(v)
	}

	board := [][]int{
		[]int{1, 2, 3},
		[]int{4, 5, 6},
	}
	// 数组的初始化，需要在后面指定类型，前面不需要，注意！
	var chushi = [3][2]int{
		{1, 2},
		{3, 4},
		{5, 6},
	}
	var chr string = "asd" // 这个初始化就可以，为什么数组的不行
	fmt.Println(board)
	fmt.Println(chushi)
	fmt.Println(chr)
	fmt.Println(Pic(2, 2))
	var arr1 [5]int
	arr1 = [5]int{1, 2, 3, 4, 5} // 为数组赋值
	fmt.Println(arr1)
}
